package Markers;

import java.awt.Point;
import java.util.ArrayList;

public class PointContour implements IContour,Cloneable
{
	Point Centre;
	public int maxY = 0;
	public int maxX = 0;
	public int minY = 0;
	public int minX = 0;
	float R2 = 0;
	ArrayList<Point> Points; 
	//===========================================================================
	public PointContour()
	{
		Points = new ArrayList<Point>();
	}
	//===========================================================================
	@Override
	public void AddPoint(int x, int y) 
	{
		Points.add(new Point(x,y));		
		//CorrectCentre(x,y);
		CorrectMaxMinValues( x, y);
	}
	//===========================================================================
	void CorrectMaxMinValues(int x,int y)
	{
		if(Points.size()==1)
		{
			minX = x;
			maxX = x;
			minY = y;
			maxY = y;
		}
		else 
		{
			if(x<minX)
				minX = x;
			if(x>maxX)
				maxX = x;
			if(y<minY)
				minY = y;
			if(y>maxY)
				maxY = y;			
		}
	}	
	//===========================================================================
	@Override
	public boolean InContour(int x, int y) 
	{
		if(this.Points.size()>8)
		{
			if(x<minX || x>maxX || y<minY || y>maxY)
				return false;
		}
		
		/*if(this.Points.size()>10)
		{
			if(NotInCircle(x,y))
				return false;
		}*/
		
		for (Point P : this.Points) 
		{
			if(P.x == x && P.y== y)
				return true;			
		}
		return false;
	}
	//===========================================================================
	/*private void CorrectCentre(int x, int y) 
	{
		if(Centre!=null)
		{
			Centre.x = (Centre.x + x)/Points.size();
			Centre.y = (Centre.y + y)/Points.size();
			float newR2 = x*x + y*y;
			if(newR2>R2)
				R2 = newR2; 
		}
		else 
		{
			Centre = new Point(x,y);
		}			
	}*/
	//===========================================================================
	/*private boolean NotInCircle(int x, int y) 
	{
		if(Centre==null)
			return true;
		int X = x - Centre.x;
		int Y = y - Centre.y;
		float R = X*X + Y*Y;
		return R > R2;
	}*/
	//===========================================================================
	@Override
	public int Count() 
	{	
		return Points.size();
	}
	//===========================================================================
	@Override
	public Point GetPoint(int index) 
	{
		if(Points.size()<=index || index<0)
			return null;
		return Points.get(index);
	}
	//===========================================================================
}
